package com.sz.framework.exception;

import com.sz.framework.utils.CommonUtil;

/**
 * 框架内部错误抛出
 *
 * @author: yxl
 * 2025-07-22
 */
public class SzException extends RuntimeException {

    /**
     * 异常细分状态码
     */
    private int code = SzErrorCode.CODE_UNDEFINED;

    public SzException(int code) {
        super();
        this.code = code;
    }

    public SzException(String message) {
        super(message);
    }

    public SzException(int code, String message) {
        super(message);
        this.code = code;
    }

    public SzException(Throwable cause) {
        super(cause);
    }

    public SzException(String message, Throwable cause) {
        super(message, cause);
    }

    public int getCode() {
        return code;
    }

    public SzException setCode(int code) {
        this.code = code;
        return this;
    }

    /**
     * 断言 flag 不为 true，否则抛出 message 异常
     *
     * @param flag    标记
     * @param message 异常信息
     */
    public static void notTrue(boolean flag, String message) {
        notTrue(flag, message, SzErrorCode.CODE_UNDEFINED);
    }

    /**
     * 断言 flag 不为 true，否则抛出 message 异常
     *
     * @param flag    标记
     * @param message 异常信息
     * @param code    异常细分状态码
     */
    public static void notTrue(boolean flag, String message, int code) {
        if (flag) {
            throw new SzException(message).setCode(code);
        }
    }

    /**
     * 断言 value 不为空，否则抛出 message 异常
     *
     * @param value   值
     * @param message 异常信息
     */
    public static void notEmpty(Object value, String message) {
        notEmpty(value, message, SzErrorCode.CODE_UNDEFINED);
    }

    /**
     * 断言 value 不为空，否则抛出 message 异常
     *
     * @param value   值
     * @param message 异常信息
     * @param code    异常细分状态码
     */
    public static void notEmpty(Object value, String message, int code) {
        if (CommonUtil.isEmpty(value)) {
            throw new SzException(message).setCode(code);
        }
    }


}
